import importlib
import os

class ProcessorManager:
    """视频处理器管理器，负责动态加载和管理处理函数"""
    
    def __init__(self):
        self.processors = {}
        self._load_processors()
    
    def _load_processors(self):
        """加载所有的处理器模块"""
        # 获取当前目录
        current_dir = os.path.dirname(__file__)
        
        # 遍历目录中的所有Python文件
        for filename in os.listdir(current_dir):
            if filename.endswith('.py') and filename != '__init__.py':
                # 获取模块名
                module_name = filename[:-3]
                
                # 导入模块
                try:
                    module = importlib.import_module(f'.{module_name}', package=__name__)
                    
                    # 查找模块中的处理函数
                    for attr_name in dir(module):
                        if attr_name.endswith('_processor') or attr_name == 'default_video_processing':
                            processor_func = getattr(module, attr_name)
                            # 生成处理器名称
                            if attr_name == 'default_video_processing':
                                processor_name = 'default'
                            else:
                                # 从函数名中提取处理器名称（去掉'_processor'后缀）
                                processor_name = attr_name.replace('_processor', '')
                            self.processors[processor_name] = processor_func
                            
                except Exception as e:
                    print(f"Error loading processor {module_name}: {e}")
    
    def get_processor(self, processor_name):
        """根据处理器名称获取处理函数"""
        if processor_name in self.processors:
            return self.processors[processor_name]
        return None
    
    def list_processors(self):
        """列出所有可用的处理器"""
        return list(self.processors.keys())

# 创建全局处理器管理器实例
processor_manager = ProcessorManager()

# 导出常用函数
def get_processor(processor_name):
    """根据处理器名称获取处理函数"""
    return processor_manager.get_processor(processor_name)


def list_available_processors():
    """列出所有可用的处理器"""
    return processor_manager.list_processors()